#pragma once

/**
 * @file drv_ble.h
 * @author
 * @brief
 * @version 0.1
 * @date 2025-07-25
 *
 * @copyright Copyright (c) 2025
 *
 */

#include "global_config.h"

#define SCAN_SLOW_TIME_MS 5000
#define SCAN_FAST_TIME_MS 1000

#define BLE_SCAN_MAX_RES 16
#define BLE_SCAN_DURATION_MS 105

typedef enum
{
    BLE_STATE_IDLE,
    BLE_STATE_SCAN_SLOW,
    BLE_STATE_SCAN_FAST,
    BLE_STATE_SCAN_CONTINUOUS,
} ble_state_t;

typedef struct
{
    uint8_t white_list_mac[BLE_SNV_NUM][6]; // 白名单mac
    int8_t ble_alive_rssi[BLE_SNV_NUM];     // 蓝牙保持快速扫描信号强度
    int8_t ble_near_rssi[BLE_SNV_NUM];      // 蓝牙触发靠近信号强度
    int8_t ble_far_rssi[BLE_SNV_NUM];       // 蓝牙触发远离信号强度
    uint8_t near_control_mask[BLE_SNV_NUM]; // control_type_t 靠近控制掩码
    uint8_t far_control_mask[BLE_SNV_NUM];  // control_type_t 远离控制掩码
    // uint8_t rssi_loc_list[2][3];             //  组合三点定位列表,用于选取ble对象，最多可存储两组
    // int8_t rssi_loc_trig_pos[2][6];          //  组合三点定位触发位置，每组精准定位可以选取3个点，用于触发指定功能,6字节分别为三个点的xy坐标
    // uint8_t rssi_loc_in_control_mask[2][3];  // 定位进入功能掩码，用于触发指定功能
    // uint8_t rssi_loc_out_control_mask[2][3]; // 定位离开功能掩码，用于触发指定功能
    // uint8_t rssi_loc_err_meter[2][3];        // 定位误差范围，精确进入中心点为in，超出误差范围为out
} ble_ee_datas_t;

typedef struct
{
    ble_state_t ble_scan_state; // ble扫描模式 ble_state_t
} ble_cu_datas_t;

// typedef void (*ble_scan_callback_t)(uint8_t *addr, char *name, int8_t rssi);

// /**
//  * @brief 安装ble驱动
//  */
// void drv_ble_install();

// /**
//  * @brief 注册ble扫描回调函数
//  *
//  * @param callback
//  */
// void drv_ble_register_scan_cb(ble_scan_callback_t callback);

// /**
//  * @brief 设置ble工作状态
//  *
//  * @param state
//  */
// void drv_ble_set_state(ble_state_t state);

// /**
//  * @brief 刷新工作状态,如白名单内存在有效地址且处于IDLE或连续扫描模式，则进入SLOW扫描模式，如无白名单地址则进入IDLE
//  */
// void drv_ble_refresh_state();

// /**
//  * @brief 获取ble工作状态
//  *
//  * @return ble_state_t
//  */
// ble_state_t drv_ble_get_state();

// /**
//  * @brief 添加ble扫描白名单
//  *
//  * @param mac
//  */
// void drv_ble_add_white_list(uint8_t *mac);

// /**
//  * @brief 删除ble扫描白名单
//  *
//  * @param mac
//  */
// void drv_ble_del_white_list(uint8_t *mac);

// /**
//  * @brief 获取掉电不存储数据
//  *
//  * @return ble_cu_datas_t*
//  */
// ble_cu_datas_t *drv_ble_get_cu_datas();

// /**
//  * @brief 获取掉电存储数据
//  *
//  * @return ble_ee_datas_t*
//  */
// ble_ee_datas_t *drv_ble_get_ee_datas();